//
//  IVCSSDKDelegate.h
//  IVCS
//
//  Created by zealcomm on 2021/9/29.
//  Copyright © 2021 zealcomm user. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <IVCS/IvcsBaseDelegate.h>
#import <IVCS/Constant.h>
#import <IVCS/ZcoModelCcsMessage.h>
#import <IVCS/ZcoModelInvitationProgress.h>
#import <IVCS/ZcoModelMember.h>
#import <IVCS/ZcoModelCMD.h>
#import <IVCS/ZcoModelFormBrief.h>
#import <IVCS/ZcoModelLinkInfo.h>
/*
 不要实现 CCSClientDelegate 及其它 protocol ，这样做是因为:只对用户提供 IVCSSDK 入口，不让用户感知到其余的 api.
 */
@protocol IvcsCustomerDelegate <IvcsBaseDelegate>
@optional

/// 房间有音视频需要渲染，已存在的音视频/新增的音视频
/// @param label 音视频标签
-(void)onStreamAddWithLabel:(NSString *_Nullable)label;

/// 房间的音视频结束
/// @param label 音视频标签
-(void)onStreamRemoveWithLabel:(NSString *_Nullable)label;

/// 接收到坐席的扫码消息
/// @param scan YES:请求扫码， NO:取消扫码
-(void)onScanCode:(NSNumber *_Nullable)scan withMessage:(ZcoModelCcsMessage<ZcoModelCMD *> *_Nonnull) scanCodeMessasge;

/// 接收到坐席获取地理位置的消息
-(void)onRequestLocation:(ZcoModelCcsMessage<ZcoModelCMD *> *_Nonnull) requestLocationMessasge;

/// 呼叫坐席的进度回调
/// @param progress 进度的状态信息  {}code,message,position,waitNumber
/// ZcoModelCcsMessage<ZcoModelInvitationProgress *> *ccsMessage = progress;
/// ZcoModelInvitationProgress *invitationProgress = ccsMessage.data;
/// InvitationState status = invitationProgress.status ;
/// ZcoModelInvitationProgress 状态码以及信息可以参考ZcoModelInvitationProgress 中注释
-(void)onInvitationProgress:(ZcoModelCcsMessage<ZcoModelInvitationProgress *> *_Nonnull)progress;

/// 用户被drop,会话被强制结束。
/// @param message 原因信息
-(void)onDrop:(NSDictionary *_Nonnull)message;

/// 用户加入session
/// @param member 用户信息
-(void)onJoinSession:(ZcoModelMember *_Nonnull)member;

/// 用户离开session
/// @param member 用户信息
-(void)onQuitSession:(ZcoModelMember *_Nonnull)member;

/// 坐席音视频准备就绪
-(void)agentVideoReadyToTalk;

/// 正在转接其他坐席
-(void)onHoldOn;

/// 坐席推送采集信息引导框，移动端可根据指令渲染一个拍照引导框
-(void)onPhotoGuideBox:(ZcoModelCcsMessage<ZcoModelCMD *> *_Nonnull)data;

/// 坐席截取访客画面
-(void)onScreenSnapshotRequest:(ZcoModelCcsMessage<ZcoModelCMD *> *_Nonnull) message;

/// 坐席邀请访客手写签名
-(void)onHandSignatureRequest:(ZcoModelCcsMessage<ZcoModelCMD *> *_Nonnull) handwritingMessasge;

/// 收到自定义消息
/// @param message 消息
-(void)onCustomMessage:(ZcoModelCcsMessage * _Nullable)message;

/**
 * 接收表单的简略信息，用来打开网页，来填写
 * @param ccsMessage 包含表单信息的 ccs 消息
 * @param formUrl 用于展示表单的 web 地址
 */
-(void)onFormData:(ZcoModelCcsMessage<ZcoModelCMD<ZcoModelFormBrief *> *> * _Nonnull) ccsMessage withFormUrl:(NSString *_Nonnull) formUrl;

/// 收到文本消息
/// @param message 文本消息
-(void)onTextMessage:(ZcoModelCcsMessage<NSString *> *_Nullable)message;

/// 收到资源文件
/// @param data 数据
-(void)onResourceData:(ZcoModelCcsMessage<ZcoModelLinkInfo *> *_Nullable)data;

/// 收到指令消息，根据指令类型，应用层渲染ui样式。
/// pdf,链接，视频相关的弹出的wkwebview
-(void)onViewResource:(ZcoModelCcsMessage<ZcoModelCMD<ZcoModelLinkInfo *> *> *_Nonnull) viewMessage;
@end
